PostgreSQL 高可用 Repmgr
1 本章背景知识
Repmgr 是由第二象限开发的一款开源的流复制管理工具,用于管理 PostgreSQL 集群中的数据复制和故障转移。它增强了 PostgreSQL 的内置热备功能(HOT-STANDBY),包括用于配置备用服务器、监视主备流复制、自动故障转移、手动主备切换等功能。
1.1 Repmgr功能概述
- 配置简单,可一键式完成部署操作。
- 支持自动Failover和手动Switchover。
- 分布式管理集群节点,易扩展,可在线增删集群节点。
- 内置Repmgrd守护进程,能执行集群节点运行状态的监控和故障处理。
- 命令行工具Repmgr功能丰富,包含节点注册Register、Clone节点、Promote节点、Follow节点以及Switchover操作等。
1.2 基本术语
术语 | 简介 |
---|---|
集群 | (1)是由数据节点,仲裁节点构成的7*24小时不间断可访问数据的管理系统。 (2)一般以半数以上节点数为仲裁依据,组织主节点、备节点、仲裁节点参与投票,主要是防止脑裂。 |
数据节点 | (1)在Repmgr+PG12的集群中,只有一个数据节点为primary,支持读写操作。 (2)其它的数据节点为standby,只支持读操作。 |
集群管理组件 | (1)repmgrd是集群守护进程,用于监控集群的运行状态。 (2)repmgr命令行工具,用于查看集群状态和对集群执行相关运维操作。 |
Witness节点 | (1)witness(仲裁) 节点可以部署,也可以不部署,主要用于避免脑裂。 (2)集群仅支持1个witness节点的部署使用。 (3)witness节点是作为一个独立节点运行,不与集群其它数据节点构成流复制关系。 |
2 Repmgr集群架构
Repmgr集群只能有一个主数据节点,可以有一个或多个备数据节点,为了避免脑裂可以在集群中部署一个Witness节点。
3 Repmgr集群部署步骤简介
Repmgr流复制管理工具对集群节点的管理是基于一个分布式的管理系统。每个节点都有自己的repmgr.conf配置文件,用来记录本节点的ID、节点名称、连接信息、数据库PGDATA目录等配置参数。在配置好这些参数后,就可以通过repmgr命令实现对集群节点的“一键式”部署。
3.1 主节点部署步骤
- 配置好相关参数。
- 启动数据库。
- 利用“repmgr primary register”命令实现对主节点的注册。(该注册的目的是把配置文件的一些主要参数写到元数据表中,以便repmgr系统对集群节点的识别操作等。)
- 启动repmgrd守护进程。
3.2 备节点部署步骤
- 配置好相关参数。
- 利用“repmgr standby clone”命令对主节点进行物理拷贝。
- 启动数据库。
- 利用“repmgr standby register”命令实现对备节点的注册。
- 启动repmgrd守护进程。
3.3 Witness节点部署步骤
-
配置好相关参数。
-
启动数据库。
-
利用“repmgr witness register”命令实现对witness节点的注册。
-
启动repmgrd守护进程。
3.4 编者注
-
部署完成后,每个节点都有自己的元数据表,记录所有集群节点的信息。
-
每个节点都有自己的repmgrd守护进程来监控节点数据库状态。
-
其中主节点守护进程主要用来监控本节点数据库服务状态。
-
备节点守护进程主要用来监控主节点和本节点数据库服务状态。
-
在发生Auto Failover时,备节点在尝试N次连接主节点失败后,repmgrd会在所有备节点中选举一个候选备节点(选举机制参考以下Tips)提升为新主节点,然后其他备节点Follow到该新主上,形成一个新的集群状态。
4 repmgr 实战
Repmgr 环境准备
Repmgr 源码安装与部署
Repmgr 故障切换
5 小结&FAQ
5.1 repmgr常用命令简介
repmgr命令 | 简介 |
---|---|
repmgr primary register | 注册对应服务器的primary节点为主服务器节点 |
repmgr primary unregister | 注销不活动的主服务器节点 |
repmgr standby clone | 从主节点复制数据到standby节点 |
repmgr standby register | 注册对应节点standby节点为备用服务器节点 |
repmgr standby unregister | 注销备用服务器节点 |
repmgr standby promote | 将备服务器节点提升为主服务器节点 |
repmgr standby follow | 将一主多备架构中,其余的standby被服务器节点重新指向新的primary主服务器节点 |
repmgr standby switchover | 将指定备服务器节点提升为主服务器节点,并将primary主服务器降级为备服务器节点 |
repmgr witness register | 注册指定节点为见证服务器节点 |
repmgr witness unregister | 注销见证服务器节点 |
repmgr node status | 查看各节点的基本信息和复制状态 |
repmgr node check | 高可用集群节点状态信息检查 |
repmgr node rejoin | 重新加入一个失效节点到集群 |
repmgr cluster show | 查看集群中已注册的节点基本信息与状态 |
repmgr cluster matrix | 查看集群中所有节点的matrix信息 |
repmgr cluster crosscheck | 查看集群中所有节点间两两交叉连接检测 |
repmgr cluster event | 查看集群事件记录信息 |
repmgr cluster cleanup | 清理集群监控历史 |
5.2 repmgr和postgresql版本兼容性矩阵
repmgr version | Supported? | Latest release | Supported PostgreSQL versions |
---|---|---|---|
repmgr 5.3 | YES | 5.3.3 (2022-10-17) | 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15 |
repmgr 5.2 | NO | 5.2.1 (2020-12-07) | 9.4, 9.5, 9.6, 10, 11, 12, 13 |
repmgr 5.1 | NO | 5.1.0 (2020-04-13) | 9.3, 9.4, 9.5, 9.6, 10, 11, 12 |
repmgr 5.0 | NO | 5.0 (2019-10-15) | 9.3, 9.4, 9.5, 9.6, 10, 11, 12 |
repmgr 4.x | NO | 4.4 (2019-06-27) | 9.3, 9.4, 9.5, 9.6, 10, 11 |
repmgr 3.x | NO | 3.3.2 (2017-05-30) | 9.3, 9.4, 9.5, 9.6 |
repmgr 2.x | NO | 2.0.3 (2015-04-16) | 9.0, 9.1, 9.2, 9.3, 9.4 |